home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / PInterfaces / DateTimeUtils.p < prev    next >
Encoding:
Text File  |  1998-02-12  |  11.4 KB  |  359 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        DateTimeUtils.p
  3.  
  4.      Contains:    International Date and Time Interfaces (previously in TextUtils)
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.1
  8.  
  9.      Copyright:    © 1994-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT DateTimeUtils;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __DATETIMEUTILS__}
  28. {$SETC __DATETIMEUTILS__ := 1}
  29.  
  30. {$I+}
  31. {$SETC DateTimeUtilsIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __CONDITIONALMACROS__}
  35. {$I ConditionalMacros.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __MACTYPES__}
  38. {$I MacTypes.p}
  39. {$ENDC}
  40.  
  41.  
  42. {$PUSH}
  43. {$ALIGN MAC68K}
  44. {$LibExport+}
  45.  
  46. {
  47.  
  48.     Here are the current routine names and the translations to the older forms.
  49.     Please use the newer forms in all new code and migrate the older names out of existing
  50.     code as maintainance permits.
  51.     
  52.     New Name                    Old Name(s)
  53.     
  54.     DateString                    IUDatePString IUDateString 
  55.     InitDateCache
  56.     LongDateString                IULDateString
  57.     LongTimeString                IULTimeString
  58.     StringToDate                String2Date
  59.     StringToTime                                
  60.     TimeString                    IUTimeString IUTimePString
  61.     LongDateToSeconds            LongDate2Secs
  62.     LongSecondsToDate            LongSecs2Date
  63.     DateToSeconds                Date2Secs
  64.     SecondsToDate                Secs2Date
  65. }
  66.  
  67.  
  68. CONST
  69.                                                                 {  Toggle results  }
  70.     toggleUndefined                = 0;
  71.     toggleOK                    = 1;
  72.     toggleBadField                = 2;
  73.     toggleBadDelta                = 3;
  74.     toggleBadChar                = 4;
  75.     toggleUnknown                = 5;
  76.     toggleBadNum                = 6;
  77.     toggleOutOfRange            = 7;                            { synonym for toggleErr3 }
  78.     toggleErr3                    = 7;
  79.     toggleErr4                    = 8;
  80.     toggleErr5                    = 9;
  81.  
  82.                                                                 {  Date equates  }
  83.     smallDateBit                = 31;                            { Restrict valid date/time to range of Time global }
  84.     togChar12HourBit            = 30;                            { If toggling hour by char, accept hours 1..12 only }
  85.     togCharZCycleBit            = 29;                            { Modifier for togChar12HourBit: accept hours 0..11 only }
  86.     togDelta12HourBit            = 28;                            { If toggling hour up/down, restrict to 12-hour range (am/pm) }
  87.     genCdevRangeBit                = 27;                            { Restrict date/time to range used by genl CDEV }
  88.     validDateFields                = -1;
  89.     maxDateField                = 10;
  90.  
  91.     eraMask                        = $0001;
  92.     yearMask                    = $0002;
  93.     monthMask                    = $0004;
  94.     dayMask                        = $0008;
  95.     hourMask                    = $0010;
  96.     minuteMask                    = $0020;
  97.     secondMask                    = $0040;
  98.     dayOfWeekMask                = $0080;
  99.     dayOfYearMask                = $0100;
  100.     weekOfYearMask                = $0200;
  101.     pmMask                        = $0400;
  102.     dateStdMask                    = $007F;                        { default for ValidDate flags and ToggleDate TogglePB.togFlags }
  103.  
  104.     eraField                    = 0;
  105.     yearField                    = 1;
  106.     monthField                    = 2;
  107.     dayField                    = 3;
  108.     hourField                    = 4;
  109.     minuteField                    = 5;
  110.     secondField                    = 6;
  111.     dayOfWeekField                = 7;
  112.     dayOfYearField                = 8;
  113.     weekOfYearField                = 9;
  114.     pmField                        = 10;
  115.     res1Field                    = 11;
  116.     res2Field                    = 12;
  117.     res3Field                    = 13;
  118.  
  119.  
  120. TYPE
  121.     LongDateField                        = SignedByte;
  122.  
  123. CONST
  124.     shortDate                    = 0;
  125.     longDate                    = 1;
  126.     abbrevDate                    = 2;
  127.  
  128.  
  129. TYPE
  130.     DateForm                            = SInt8;
  131.  
  132. CONST
  133.                                                                 {  StringToDate status values  }
  134.     fatalDateTime                = $8000;                        {  StringToDate and String2Time mask to a fatal error  }
  135.     longDateFound                = 1;                            {  StringToDate mask to long date found  }
  136.     leftOverChars                = 2;                            {  StringToDate & Time mask to warn of left over characters  }
  137.     sepNotIntlSep                = 4;                            {  StringToDate & Time mask to warn of non-standard separators  }
  138.     fieldOrderNotIntl            = 8;                            {  StringToDate & Time mask to warn of non-standard field order  }
  139.     extraneousStrings            = 16;                            {  StringToDate & Time mask to warn of unparsable strings in text  }
  140.     tooManySeps                    = 32;                            {  StringToDate & Time mask to warn of too many separators  }
  141.     sepNotConsistent            = 64;                            {  StringToDate & Time mask to warn of inconsistent separators  }
  142.     tokenErr                    = $8100;                        {  StringToDate & Time mask for 'tokenizer err encountered'  }
  143.     cantReadUtilities            = $8200;
  144.     dateTimeNotFound            = $8400;
  145.     dateTimeInvalid                = $8800;
  146.  
  147.  
  148. TYPE
  149.     StringToDateStatus                    = INTEGER;
  150.     String2DateStatus                    = INTEGER;
  151.     DateCacheRecordPtr = ^DateCacheRecord;
  152.     DateCacheRecord = PACKED RECORD
  153.         hidden:                    ARRAY [0..255] OF INTEGER;                {  only for temporary use  }
  154.     END;
  155.  
  156.     DateCachePtr                        = ^DateCacheRecord;
  157.     DateTimeRecPtr = ^DateTimeRec;
  158.     DateTimeRec = RECORD
  159.         year:                    INTEGER;
  160.         month:                    INTEGER;
  161.         day:                    INTEGER;
  162.         hour:                    INTEGER;
  163.         minute:                    INTEGER;
  164.         second:                    INTEGER;
  165.         dayOfWeek:                INTEGER;
  166.     END;
  167.  
  168.     LongDateTime                        = SInt64;
  169.     LongDateTimePtr                     = ^LongDateTime;
  170.     LongDateCvtPtr = ^LongDateCvt;
  171.     LongDateCvt = RECORD
  172.         CASE INTEGER OF
  173.         0: (
  174.             c:                    SInt64;
  175.             );
  176.         1: (
  177.             lHigh:                UInt32;
  178.             lLow:                UInt32;
  179.            );
  180.     END;
  181.  
  182.     LongDateRecPtr = ^LongDateRec;
  183.     LongDateRec = RECORD
  184.         CASE INTEGER OF
  185.         0: (
  186.             era:                INTEGER;
  187.             year:                INTEGER;
  188.             month:                INTEGER;
  189.             day:                INTEGER;
  190.             hour:                INTEGER;
  191.             minute:                INTEGER;
  192.             second:                INTEGER;
  193.             dayOfWeek:            INTEGER;
  194.             dayOfYear:            INTEGER;
  195.             weekOfYear:            INTEGER;
  196.             pm:                    INTEGER;
  197.             res1:                INTEGER;
  198.             res2:                INTEGER;
  199.             res3:                INTEGER;
  200.            );
  201.         1: (
  202.             list:                ARRAY [0..13] OF INTEGER;                { Index by LongDateField! }
  203.             );
  204.         2: (
  205.             eraAlt:                INTEGER;
  206.             oldDate:            DateTimeRec;
  207.            );
  208.     END;
  209.  
  210.     DateDelta                            = SInt8;
  211.     TogglePBPtr = ^TogglePB;
  212.     TogglePB = RECORD
  213.         togFlags:                LONGINT;                                { caller normally sets low word to dateStdMask=$7F }
  214.         amChars:                ResType;                                { from 'itl0', but uppercased }
  215.         pmChars:                ResType;                                { from 'itl0', but uppercased }
  216.         reserved:                ARRAY [0..3] OF LONGINT;
  217.     END;
  218.  
  219.     ToggleResults                        = INTEGER;
  220. {
  221.  **************************************************************************************
  222.  *
  223.  * The following functions are new names that work on 68k and PowerPC
  224.  *
  225.  **************************************************************************************
  226. }
  227.  
  228. FUNCTION InitDateCache(theCache: DateCachePtr): OSErr;
  229.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  230.     INLINE $2F3C, $8204, $FFF8, $A8B5;
  231.     {$ENDC}
  232. FUNCTION StringToDate(textPtr: Ptr; textLen: LONGINT; theCache: DateCachePtr; VAR lengthUsed: LONGINT; VAR dateTime: LongDateRec): StringToDateStatus;
  233.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  234.     INLINE $2F3C, $8214, $FFF6, $A8B5;
  235.     {$ENDC}
  236. FUNCTION StringToTime(textPtr: Ptr; textLen: LONGINT; theCache: DateCachePtr; VAR lengthUsed: LONGINT; VAR dateTime: LongDateRec): StringToDateStatus;
  237.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  238.     INLINE $2F3C, $8214, $FFF4, $A8B5;
  239.     {$ENDC}
  240. PROCEDURE IUDateString(dateTime: LONGINT; longFlag: DateForm; VAR result: Str255);
  241.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  242.     INLINE $4267, $A9ED;
  243.     {$ENDC}
  244. PROCEDURE IUTimeString(dateTime: LONGINT; wantSeconds: BOOLEAN; VAR result: Str255);
  245.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  246.     INLINE $3F3C, $0002, $A9ED;
  247.     {$ENDC}
  248. PROCEDURE IUDatePString(dateTime: LONGINT; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  249.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  250.     INLINE $3F3C, $000E, $A9ED;
  251.     {$ENDC}
  252. PROCEDURE IUTimePString(dateTime: LONGINT; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  253.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  254.     INLINE $3F3C, $0010, $A9ED;
  255.     {$ENDC}
  256. PROCEDURE IULDateString(VAR dateTime: LongDateTime; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  257.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  258.     INLINE $3F3C, $0014, $A9ED;
  259.     {$ENDC}
  260. PROCEDURE IULTimeString(VAR dateTime: LongDateTime; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  261.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  262.     INLINE $3F3C, $0016, $A9ED;
  263.     {$ENDC}
  264.  
  265. PROCEDURE LongDateToSeconds({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  266.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  267.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  268.     {$ENDC}
  269. PROCEDURE LongSecondsToDate({CONST}VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  270.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  271.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  272.     {$ENDC}
  273. FUNCTION ToggleDate(VAR lSecs: LongDateTime; field: LongDateField; delta: DateDelta; ch: INTEGER; {CONST}VAR params: TogglePB): ToggleResults;
  274.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  275.     INLINE $2F3C, $820E, $FFEE, $A8B5;
  276.     {$ENDC}
  277. FUNCTION ValidDate({CONST}VAR vDate: LongDateRec; flags: LONGINT; VAR newSecs: LongDateTime): INTEGER;
  278.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  279.     INLINE $2F3C, $820C, $FFE4, $A8B5;
  280.     {$ENDC}
  281. FUNCTION ReadDateTime(VAR time: UInt32): OSErr;
  282.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  283.     INLINE $205F, $A039, $3E80;
  284.     {$ENDC}
  285. PROCEDURE GetDateTime(VAR secs: UInt32);
  286.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  287.     INLINE $205F, $20B8, $020C;
  288.     {$ENDC}
  289. FUNCTION SetDateTime(time: UInt32): OSErr;
  290.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  291.     INLINE $201F, $A03A, $3E80;
  292.     {$ENDC}
  293. PROCEDURE SetTime({CONST}VAR d: DateTimeRec);
  294.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  295.     INLINE $205F, $A9C7, $A03A;
  296.     {$ENDC}
  297. PROCEDURE GetTime(VAR d: DateTimeRec);
  298.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  299.     INLINE $205F, $2038, $020C, $A9C6;
  300.     {$ENDC}
  301. PROCEDURE DateToSeconds({CONST}VAR d: DateTimeRec; VAR secs: UInt32);
  302. PROCEDURE SecondsToDate(secs: UInt32; VAR d: DateTimeRec);
  303.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  304.     INLINE $205F, $201F, $A9C6;
  305.     {$ENDC}
  306. {
  307.  **************************************************************************************
  308.  *
  309.  * The following provide direct function prototypes for new names for 68k
  310.  *
  311.  **************************************************************************************
  312. }
  313. PROCEDURE DateString(dateTime: LONGINT; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  314.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  315.     INLINE $3F3C, $000E, $A9ED;
  316.     {$ENDC}
  317. PROCEDURE TimeString(dateTime: LONGINT; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  318.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  319.     INLINE $3F3C, $0010, $A9ED;
  320.     {$ENDC}
  321. PROCEDURE LongDateString(VAR dateTime: LongDateTime; longFlag: DateForm; VAR result: Str255; intlHandle: Handle);
  322.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  323.     INLINE $3F3C, $0014, $A9ED;
  324.     {$ENDC}
  325. PROCEDURE LongTimeString(VAR dateTime: LongDateTime; wantSeconds: BOOLEAN; VAR result: Str255; intlHandle: Handle);
  326.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  327.     INLINE $3F3C, $0016, $A9ED;
  328.     {$ENDC}
  329. {$IFC OLDROUTINENAMES }
  330. PROCEDURE LongDate2Secs({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  331.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  332.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  333.     {$ENDC}
  334. PROCEDURE LongSecs2Date(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  335.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  336.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  337.     {$ENDC}
  338. PROCEDURE Date2Secs({CONST}VAR d: DateTimeRec; VAR secs: UInt32);
  339. PROCEDURE Secs2Date(secs: UInt32; VAR d: DateTimeRec);
  340.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  341.     INLINE $205F, $201F, $A9C6;
  342.     {$ENDC}
  343. {$ENDC}  {OLDROUTINENAMES}
  344.  
  345.  
  346.  
  347.  
  348.  
  349. {$ALIGN RESET}
  350. {$POP}
  351.  
  352. {$SETC UsingIncludes := DateTimeUtilsIncludes}
  353.  
  354. {$ENDC} {__DATETIMEUTILS__}
  355.  
  356. {$IFC NOT UsingIncludes}
  357.  END.
  358. {$ENDC}
  359.